home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Texty / crackme / RBSDECOD.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-01-09  |  3.3 KB  |  160 lines

  1. Program RbsTrialDecode (Input,Output);
  2.  
  3. Function LowByte(Value : word) : word;
  4. Begin
  5.   LowByte := Value - (Value div 256)*256;
  6. End;
  7.  
  8. Function HighByte(Value : word) : word;
  9. Begin
  10.   HighByte := Value div 256;
  11. End;
  12.  
  13. Function Encode(Var InBX : word;
  14.                 InCX : word;
  15.                 CorrectInput : byte) : byte;
  16. Var
  17.   BX,
  18.   CX            : word;
  19.   CorrectOutput,
  20.   BH,
  21.   BL,
  22.   CH,
  23.   CL,
  24.   TempByte      : byte;
  25.  
  26. Begin
  27.   BX := InBX;
  28.   CX := InCX;
  29.   BH := HighByte(InBX);
  30.   BL := LowByte(InBX);
  31.   CorrectOutPut := CorrectInput + BL;
  32.   If (CorrectOutput < CorrectInput) Then
  33.   Begin
  34.     CorrectOutput := (CorrectOutput XOR 255) + 1;
  35.     BL := BL + 1;
  36.   End;
  37.   BX := 256*BH + BL;
  38.   CX := CX*BX;
  39.   CL := LowByte(CX);
  40.   CH := HighByte(CX);
  41.   CorrectOutput := CorrectOutput - CH - CL;
  42.   BH := HighByte(BX);
  43.   BL := LowByte(BX);
  44.   BX := 256*BL + BH;
  45.   InBX := BX;
  46.   Encode := CorrectOutput;
  47. End;
  48.  
  49. Function Decode(Var InBX      : word;
  50.                 InCX          : word;
  51.                 CorrectOutput : byte;
  52.                 NoJump        : boolean) : Byte;
  53.  
  54. Var
  55.  
  56.   BX,
  57.   CX  : word;
  58.   CorrectInput     : byte;
  59.   BH,
  60.   BL,
  61.   CH,
  62.   CL,
  63.   TempByte   : byte;
  64.  
  65. Begin
  66.   If NoJump Then
  67.   Begin
  68.     CX := InCX;
  69.     BX := InBX;
  70.     BL := LowByte(InBX);
  71.     BH := HighByte(InBX);
  72.     CX := CX * BX;
  73.     CL := LowByte(CX);
  74.     CH := HighByte(CX);
  75.     TempByte := CL + CH;
  76.     CorrectInput := CorrectOutput + TempByte - BL;
  77.     BX := BH + 256*BL;
  78.     TempByte := CorrectInput + BL;
  79.     If TempByte >= CorrectInput Then
  80.     Begin
  81.       Decode := CorrectInput;
  82.       InBX := BX;
  83.     End
  84.     Else
  85.       Decode := 0;
  86.   End
  87.   Else
  88.   Begin
  89.     CX := InCX;
  90.     BX := InBX;
  91.     BL := LowByte(BX);
  92.     BH := HighByte(BX);
  93.     BL := BL + 1;
  94.     BX := BL + BH*256;
  95.     CX := BX * CX;
  96.     CL := LowByte(CX);
  97.     CH := HighByte(CX);
  98.     TempByte := CL+CH;
  99.     CorrectInput := ((CorrectOutput + TempByte) XOR 255) + 1 -
  100. LowByte(InBX);
  101.     BX := BH + 256*BL;
  102.     TempByte := CorrectInput + LowByte(InBX);
  103.     If TempByte < CorrectInput Then
  104.     Begin
  105.       Decode := CorrectInput;
  106.       InBX := BX;
  107.     End
  108.     Else
  109.       Decode := 0;
  110.   End;
  111. End;
  112.  
  113.  
  114. Const
  115.   EncodedPassword : array[2..11] of byte =
  116. (31,245,207,138,86,33,217,123,86,10);
  117.  
  118. Var
  119.   InBX,
  120.   InCX,
  121.   Counter1,
  122.   Counter2,
  123.   Mask,
  124.   Temp           : word;
  125.   CorrectInput,
  126.   a,b            : byte;
  127.   GoodPassword,
  128.   NoJump         : boolean;
  129.   PasswordString : String;
  130.  
  131. Begin
  132.   Writeln;
  133.   For Counter1 := 0 to 511 do
  134.   Begin
  135.     Mask := 1;
  136.     InBX := 40357;
  137.     GoodPassword := True;
  138.     PasswordString := '';
  139.     For Counter2 := 1 to 9 do
  140.     Begin
  141.       Temp := Counter1 and Mask;
  142.       NoJump := Temp <> 0;
  143.       InCX := 12 - Counter2;
  144.       CorrectInput := Decode(InBX,InCX,EncodedPassword[InCX],NoJump);
  145.       If (CorrectInput <= 126) and (CorrectInput >= 32) Then
  146.         PasswordString := PasswordString + Chr(CorrectInput)
  147.       Else
  148.       Begin
  149.         PasswordString := PasswordString + Chr(CorrectInput);
  150.         GoodPassword := False;
  151.       End;
  152.       Mask := Mask * 2;
  153.     End {for};
  154.     a := Encode(InBX,2,13);
  155.     b := Encode(InBX,1,0);
  156.     If GoodPassword and (a = 31) and (b = 97) Then
  157.       Writeln(PasswordString);
  158.   End {for};
  159. End.
  160.